package Z01YiChang;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class YC02YiChangChuLi {}

class TestException1{
    public static void main(String[] args) {
        File f = new File("c:/LOL.exe");
        try {
            System.out.println("试图打开LOL");
            new FileInputStream(f);
            System.out.println("成功打开");
        } catch (FileNotFoundException e) {
            System.out.println("d:/LOL.exe 不存在");
            e.printStackTrace();
        }
    }
}

class TestException2{
    public static void main(String[] args) {
        File f = new File("c:LOL.exe");
        try {
            System.out.println("试图打开LOL.exe");
            new FileInputStream(f);
            System.out.println("OK");
        } catch (Exception e) {
            System.out.println("No");
            e.printStackTrace();
        }
    }
}

class TestException3 {
    public static void main(String[] args) {
        File f = new File("c:/LOL.exe");

        try {
            System.out.println("试图");
            new FileInputStream(f);
            System.out.println("OK");
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            Date d = sdf.parse("2016-06-03");
        } catch (FileNotFoundException e) {
            System.out.println("NO");
            e.printStackTrace();
        } catch (ParseException e) {
            System.out.println("解析错误");
            e.printStackTrace();
        }
    }
}

class TestException5{
    public static void main(String[] args) {
        File f = new File("c:/LOL.exe");

        try {
            System.out.println("试图");
            new FileInputStream(f);
            System.out.println("成功");
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            Date d = sdf.parse("2016-06-13");
        } catch (FileNotFoundException |ParseException e) {
            if (e instanceof FileNotFoundException)
                System.out.println("文件不存在");
            if (e instanceof ParseException)
                System.out.println("日期格式错误");
            e.printStackTrace();
        }

    }
}

class TestException6{
    public static void main(String[] args) {
        File f = new File("c:/LOL.exe");

        try {
            new FileInputStream(f);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }finally {
            System.out.println("无论文件是否存在，都会执行");
        }
    }
}

class TestException7{
    public static void main(String[] args) {
        method1();
    }

    private static void method1(){
        try {
            method2();
        }catch (FileNotFoundException e){
            e.printStackTrace();
        }
    }

    private static void method2()throws FileNotFoundException{
        File f = new File("c:/LOL.exe");

        System.out.println("----");
        new FileInputStream(f);
        System.out.println("------");
    }
}

/*
步骤 7 : throw和throws的区别顶折纠问
throws与throw这两个关键字接近，不过意义不一样，有如下区别：
1. throws 出现在方法声明上，而throw通常都出现在方法体内。
2. throws 表示出现异常的一种可能性，并不一定会发生这些异常；
  throw则是抛出了异常，执行throw则一定抛出了某个异常对象。
 */

/*
假设有一个方法 public int method()， 会返回一个整数
在这个方法中有try catch 和 finally.
try 里返回 1
catch 里 返回 2
finally 里 返回3
那么，这个方法到底返回多少？
 */